package com.example.Controller;


import com.example.Domain.User;
import com.example.Mapper.UserMapper;
import com.example.common.ServerResponse;
import com.example.service.JwtLoginService;
import com.example.service.Impl.UserServiceImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.Date;

@RestController
@RequestMapping("/user")
public class UserController {


    @Resource
    UserMapper userDao;
    @Resource
    UserServiceImpl userService;
    @Autowired
    private JwtLoginService jwtLoginService;

    private Logger logger = LoggerFactory.getLogger(UserController.class);

    /**
     * 用户登录 成功后给前台返回一个token,后面需要拿这个token去验证
     * todo 用户类型：ilab用户 2019年9月24日15:34:07
     * 前台传入
     *
     * @param userVo
     * @return
     */
    @RequestMapping(value = "/login", method = RequestMethod.POST)
    @ResponseBody
    public ServerResponse<String> login(@RequestBody User userVo) {
        // 如果次数 == 5 那么抛出异常 等待十分钟
        try {
            int usercount = userDao.getUserCount(userVo.getLoginName());
            Date sdbegintime = userDao.getsdbegintime(userVo.getLoginName());
            //  long timeDifference = ((new Date().getTime() - sdbegintime.getTime()) / 60 / 1000);
            userDao.getUserCount2(userVo.getLoginName());
            userDao.gettimepassword(userVo.getLoginName());

        } catch (Exception e) {
            e.printStackTrace();
            return ServerResponse.createByACCOUNTError("登陆失败,请重新登录");
        }

        // todo 如果是管理员或者评审专家 直接登陆 admin 123
        logger.info(userVo + "");
        if (userVo.getRoleid() == 1 || userVo.getRoleid() == 3) {
            User user = new User();
            //角色id
            user.setRoleid(userVo.getRoleid());
            //登录名
            user.setLoginName(userVo.getLoginName());
            //登陆密码
            user.setPassword(userVo.getPassword());
            return jwtLoginService.login(user);
        }


//        //验证登陆接口 todo 满足ilab用户验证要求 loginName password nonce cnonce 已解决 2019年9月23日13:11:39
//        String nonce = StringUtil.getRandomString(16);
//        String cnonce = StringUtil.getRandomString(16);
//        String newPassword = SHA256Util.generateShaPwd(nonce,userVo.getPassword(),cnonce);
//        /**
//         * 测试平台url
//         */
//        //String json = HttpUtil.loadJSON("http://202.205.145.156:8017/sys/api/user/validate?username="+userVo.getLoginName()+"&password="+newPassword+"&nonce="+nonce+"&cnonce="+cnonce);
//
//        /**
//         * 正式平台的url ！！！
//         */
//        String json = HttpUtil.loadJSON("http://www.ilab-x.com/sys/api/user/validate?username="+userVo.getLoginName()+"&password="+newPassword+"&nonce="+nonce+"&cnonce="+cnonce);
//        JSONObject object = JSONObject.parseObject(json);
//        int code = object.getInteger("code");
//        // code==0 代表验证成功
//        if(code != 0){
//            //验证不成功 返回错误信息
//            return ServerResponse.createByErrorMsg("请使用ilab平台注册账户！");
//        }
        User user = new User();
        //角色id
        user.setRoleid(userVo.getRoleid());
        //登录名
        user.setLoginName(userVo.getLoginName());
        //登陆密码
        user.setPassword(userVo.getPassword());
        return jwtLoginService.login(user);
    }



    /**
     * 忘记密码时获取验证码 邮箱验证码
     */
    @RequestMapping(value = "/forget_checkCode", method = RequestMethod.GET)
    @ResponseBody
    public ServerResponse<String> forgetSendEmailCode(String email) {
        //根据邮箱获取验证码
        return userService.forgetSendEmailCode(email);
    }

    /**
     * 忘记密码时根据邮箱地址获取验证码 更新
     */
    @RequestMapping(value = "/updatePassword", method = RequestMethod.PUT)
    @ResponseBody
    public ServerResponse<String> updatePassword(@RequestBody User user) {
        return userService.updatePassword(user);
    }
}
